Return Errors from PHP Run Via. Ajax | 您所在的位置:网站首页 › jquery return › Return Errors from PHP Run Via. Ajax |
Return errors from PHP run via. AJAX? I don't know about jQuery, but if it distinguishes between successful and unsuccessful (HTTP 200 OK vs. HTTP != 200) Ajax requests, you might want your PHP script respond with an HTTP code not equal to 200: if ($everything_is_ok) { header('Content-Type: application/json'); print json_encode($result); }else { header('HTTP/1.1 500 Internal Server Booboo'); header('Content-Type: application/json; '); die(json_encode(array('message' => 'ERROR', 'code' => 1337))); } ajax how to return an error message from a PHP fileHere is exactly how you can do it : The Very Easy Way :IN YOUR PHP FILE : if ($query) { echo "success"; //anything on success} else { die(header("HTTP/1.0 404 Not Found")); //Throw an error on failure}AT YOUR jQuery AJAX SIDE : var x = $(this).text();$.ajax({ type: 'POST', url: 'process.php', data: { text1: x }, success:function(data) { alert(data); //=== Show Success Message== }, error:function(data){ alert("error occured"); //===Show Error Message==== }}); Display PHP errors in ajax request callbackThe success and error functions in your jQuery AJAX call simply checks for the HTTP status code for the request. When PHP produces errors it does not change the status code, and so jQuery triggers the success function. If you want to use the jQuery error, you will have to change the status code. You can do this by catching the Error (PHP >= 7): try { $data = test();}catch (\Error $e) { http_response_code(500); echo $e->getMessage();}Or you could keep the status code as 200 (default) and send your response in JSON including the success and error properties you like, as well as any other things you may want to return with the request. header('Content-type: application/json');$response['success'] = true;$response['error'] = null;try { $data = test();}catch (\Error $e) { $response['success'] = false; $response['error'] = $e->getMessage();}echo json_encode($response);And make sure to remove the dataType property from the ajax request to let jQuery automatically determine the type header. If your program is throwing errors unexpectedly, this probably means you're doing something wrong. If you expect it to throw errors, you need to catch them. This either means wrapping things in try/catch blocks or a combination of set_exception_handler(), set_error_handler() and register_shutdown_function() to accomplish this globally. Return PHP error handling with AJAXJavascript: success: function (data) { if(!data.success) alert(data.errors); // Just for demonstration purposes $("input").val(data.errors); $("form").hide(); reloadInfo(); }PHP: header("Content-Type: text/json; charset=utf8");if($info != 'Info Here') { $conn = mysqli_connect(); $query = "INSERT INTO leads VALUES(0, '$companyName', 1, NOW(), 3)"; $result = mysqli_query($conn, $query) or die ('Error Could Not Query');$id = mysqli_insert_id($result); header("Location: http://localhost/manage/info.php?id=$id"); mysqli_close($conn);} else { echo json_encode(array("success" => false,"error" => "Some random error happened"));} Show PHP error with AJAX. If there are no errors, show output from PHP functionYou can capture the output of the getUsers function without changing the current behavior if that's what you're after. In the success output change $responseArray = ["success" => true, "data" => getUsers();];echo json_encode($responseArray)to ob_start();getUsers();$usersList = ob_get_clean();$responseArray = ["success" => true, "data" => $usersList];echo json_encode($responseArray)What this does is captures the output and stores it into a varable $usersList which you can then return as a string. You'd be better off returning the users as an array and dealing with generating the markup on the client side IMO, but that's up to you. This is just another way to get what you have working. More information about php's output buffer here Jquery AJAX return from PHPTo invoke the error handler of your $.ajax, you can write the following code in PHP (for FastCGI): header('Status: 404 Not found');exit;Alternatively, use header('HTTP/1.0 404 Not Found') if you're not using FastCGI. Personally I wouldn't use this approach, because it blurs the line between web server errors and application errors. You're better off with an error mechanism like: echo json_encode(array('error' => array( 'message' => 'Error message', 'code' => 123,)));exit;Inside your success handler: if (data.error) { alert(data.error.message);} AJAX-PHP Stay on same page if validation failsYou need to prevent the default action of form i.e. submit when input type of submit is clicked, so that your ajax process runs smoothly. In your click event add e.preventDefault(); $('#submit_form').on('click', function (e) { //get the e as parameter e.preventDefault(); //rest of your code.}); ajax to return error status codejQuery has no idea what your PHP script is supposed to be doing, so it's not looking for a "status" variable in your returned result. All jQuery knows is whether the actual HTTP request "worked". If it gets back a 200 result, that's success no matter what's in the result. You either need to have your success handler look for cases where the HTTP request succeeded but the data says "error", or (better) have the PHP script use http_response_code() to change the HTTP status from 200 to something like 400 or 500 that will indicate an error. Related TopicsBing Search API and Azure Endforeach in Loops Sanitize File Path in PHP PHP Curl How to Add the User Agent Value or Overcome the Servers Blocking Curl Requests Does PHP Optimize Tail Recursion Laravel Cannot Delete or Update a Parent Row: a Foreign Key Constraint Fails How to Convert Array to a String Using Methods Other Than JSON Upload Multiple Image File Using Httpurlconnection Escaping Column Names in Pdo Statements Saving Habtm with Extra Fields How Does Array_Diff Work MySQL Error 'Type=Myisam' How Many Days Until X-Y-Z Date How Is an Array in a PHP Foreach Loop Read Laravel 5 Session Lifetime PHP Echo Text Color Object of Class Stdclass Could Not Be Converted to String Php:How to Send the Original Password to the User When He Clicks Forgot Password Which Is Encrypted by Using Md5 |
CopyRight 2018-2019 实验室设备网 版权所有 |